package com.itheima.config;

import com.itheima.pojo.User;
import org.springframework.boot.autoconfigure.condition.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @Description 定义配置类
 * @Created by itheima
 * proxyBeanMethods = true
 *      代理当前的配置类，实现单例模式【full模式】
 * proxyBeanMethods = false
 *      不代理当前的配置类，实现多例模式【lite模式】
 *
 * 当bean对象初次初始化时，那种模式加载效率较高？
 *          lite模式
 *          因为full模式需要从ioc容器中检查，浪费性能
 *      一般无论是第三方的starter或者是springboot提供的starter依赖，为了
 *      让工程快速启动，优先选择使用lite模式
 */
//@Configuration(proxyBeanMethods = false)
//@Configuration
@Configuration
//当前环境中没有Driver，myconfig对象bean不会被创建
//@ConditionalOnClass(name = {"com.mysql.cj.jdbc.Driver"})
////当前环境中没有Driver，myconfig对象bean创建
//@ConditionalOnMissingClass(value = {"com.mysql.cj.jdbc.Driver"})
//指定ioc容器中必须存在一个叫做myUser的bean，那么配置类才能被构建
//@ConditionalOnBean(name = "myUser")
////指定ioc容器中没有myUser的bean，那么配置类才能被构建
//@ConditionalOnMissingBean(name = "myUser")
//说明：配置文件中有指定的前缀，名称，以及配置的值，都相同则加载
@ConditionalOnProperty(prefix = "myuser",name = "show",havingValue = "true")
public class MyConfig {

    @Bean
    public User user(){
        User user = new User();
        user.setName("lisi");
        user.setAge(20);
        return user;
    }
}
